home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / util / boot / MinStack.lha / MinStack / MinStack.ASM next >
Encoding:
Assembly Source File  |  2002-09-20  |  3.1 KB  |  195 lines

  1.  
  2.     incdir    "include:"
  3.  
  4.     include    "exec/execbase.i"
  5.     include    "dos/dos.i"
  6.     include    "dos/dostags.i"
  7.     include    "lvo/LVOs.i"
  8.  
  9. main:
  10.     move.l    (4).w,d4
  11.     lea.l    (_dos_name,pc),a1
  12.     moveq    #37,d0
  13.     movea.l    d4,a6
  14.     jsr    (_LVOOpenLibrary,a6)
  15.     move.l    d0,d5
  16.     bne.b    .dosok
  17.     moveq    #RETURN_FAIL,d0
  18.     rts
  19.  
  20. .dosok
  21.     lea.l    (_template,pc),a0
  22.     move.l    a0,d1
  23.     lea.l    (_minStack,pc),a0
  24.     move.l    a0,d2
  25.     moveq    #0,d3
  26.     movea.l    d5,a6
  27.     jsr    (_LVOReadArgs,a6)
  28.     movea.l    d0,a3
  29.  
  30.  
  31.     movea.l    d4,a6
  32.     jsr    (_LVOForbid,a6)
  33.     move.l    #(_end-_start),d0
  34.     moveq    #0,d1
  35.     jsr    (_LVOAllocMem,a6)
  36.     tst.l    d0
  37.     bne.b    .memok
  38.     moveq    #RETURN_FAIL,d6
  39.     moveq    #ERROR_NO_FREE_STORE,d7
  40.     bra.b    .exit
  41.  
  42. .memok
  43.     lea.l    (_start,pc),a0
  44.     movea.l    d0,a1
  45.     movea.l    d0,a4
  46.     move.l    #(_end-_start),d0
  47.     jsr    (_LVOCopyMemQuick,a6)
  48.  
  49.  
  50.     movea.l    d5,a1
  51.     addq    #1,(LIB_OPENCNT,a1)
  52.     lea.l    (newCreateProc-_start,a4),a0
  53.     move.l    a0,d0
  54.     movea.w    #_LVOCreateProc,a0
  55.     jsr    (_LVOSetFunction,a6)
  56.     move.l    d0,(oldCreateProc-_start+2,a4)
  57.  
  58.  
  59.     movea.l    d5,a1
  60.     lea.l    (newCreateNewProc-_start,a4),a0
  61.     move.l    a0,d0
  62.     movea.w    #_LVOCreateNewProc,a0
  63.     jsr    (_LVOSetFunction,a6)
  64.     move.l    d0,(oldCreateNewProc-_start+2,a4)
  65.  
  66.  
  67.     movea.l    d5,a1
  68.     lea.l    (newRunCommand-_start,a4),a0
  69.     move.l    a0,d0
  70.     movea.w    #_LVORunCommand,a0
  71.     jsr    (_LVOSetFunction,a6)
  72.     move.l    d0,(oldRunCommand-_start+2,a4)
  73.  
  74.  
  75.     movea.l    (_minStack,pc),a0
  76.     cmpa.w    #0,a0
  77.     beq.b    .nomin
  78.     move.l    (a0),d0
  79.     addq    #3,d0
  80.     andi.b    #%11111100,d0
  81.     lea.l    (minStack-_start,a4),a1
  82.     move.l    d0,(a1)
  83.  
  84. .nomin
  85.     moveq    #RETURN_OK,d6
  86.     moveq    #0,d7
  87.  
  88. .exit
  89.     jsr    (_LVOPermit,a6)
  90.     movea.l    d5,a6
  91.     move.l    a3,d1
  92.     beq.b    .noargs
  93.     jsr    (_LVOFreeArgs,a6)
  94.  
  95. .noargs
  96.     move.l    d7,d1
  97.     beq.b    .noerror
  98.     moveq    #0,d2
  99.     jsr    (_LVOPrintFault,a6)
  100.  
  101. .noerror
  102.     movea.l    d5,a1
  103.     movea.l    d4,a6
  104.     jsr    (_LVOCloseLibrary,a6)
  105.     move.l    d6,d0
  106.     rts
  107.  
  108. _dos_name    dc.b    'dos.library',0
  109. _template    dc.b    'MIN/N',0
  110.         dc.b    '$VER: MinStack 1.1 PK',0
  111.  
  112.     CNOP    0,4
  113. _minStack    dc.l    0
  114.  
  115. ;************** PATCHCODE ***********************
  116.  
  117. _start
  118. minStack    dc.l    8000
  119.  
  120. ;------------------------------------------------
  121.  
  122.     CNOP    0,4
  123. newCreateProc:
  124.     cmp.l    (minStack,pc),d4
  125.     bge.b    oldCreateProc
  126.     move.l    (minStack,pc),d4
  127. oldCreateProc
  128.     jmp    $BAD2FEED
  129.  
  130. ;------------------------------------------------
  131.  
  132.     CNOP    0,4
  133. newCreateNewProc:
  134.     tst.l    d1
  135.     bne.b    .tagsok
  136.     moveq    #0,d0
  137.     rts
  138. .tagsok
  139.     movea.l    d1,a0
  140. .findstack
  141.     move.l    #NP_StackSize,d0
  142. .loop
  143.     cmp.l    (a0),d0
  144.     beq.b    .found
  145.     tst.l    (a0)
  146.     beq.b    .notfound
  147.     cmp.l    #TAG_MORE,(a0)
  148.     beq.b    .more
  149.     cmp.l    #TAG_SKIP,(a0)
  150.     beq.b    .skip
  151.     addq    #ti_SIZEOF,a0
  152.     bra.b    .loop
  153. .more
  154.     movea.l    (ti_Data,a0),a0
  155.     bra.b    .loop
  156. .skip
  157.     moveq    #ti_SIZEOF,d0
  158.     mulu    (ti_Data,a0),d0
  159.     addq    #ti_SIZEOF,d0
  160.     adda.l    d0,a0
  161.     bra.b    .findstack
  162. .found
  163.     move.l    (ti_Data,a0),d0
  164.     cmp.l    (minStack,pc),d0
  165.     bge.b    .stackok
  166. .notfound
  167.     move.l    (minStack,pc),d0
  168. .stackok
  169.     move.l    d1,           -(sp)
  170.     move.l    #TAG_MORE,    -(sp)
  171.     move.l    d0,           -(sp)
  172.     move.l    #NP_StackSize,-(sp)
  173.     move.l    sp,d1
  174. oldCreateNewProc
  175.     jsr    $BAD2FEED                    
  176.     adda.w    #12,sp
  177.     move.l    (sp)+,d1
  178.     rts
  179.  
  180. ;------------------------------------------------
  181.  
  182.     CNOP    0,4
  183. newRunCommand:
  184.     cmp.l    (minStack,pc),d2
  185.     bge.b    oldRunCommand
  186.     move.l    (minStack,pc),d2
  187. oldRunCommand
  188.     jmp    $BAD2FEED
  189.  
  190. ;------------------------------------------------
  191.  
  192.     CNOP    0,4
  193. _end
  194.  
  195.